'use strict'

import { app, BrowserWindow, dialog, ipcMain } from 'electron' // 引入dialog对话框模块
import path from 'path'
import url from 'url'

/**
 * Set `__static` path to static files in production
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
 */
if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}

let mainWindow
const winURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:9080#login`
  : `file://${__dirname}/index.html#login`

function createWindow () {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    width: 1100,
    height: 660,
    useContentSize: true,
    frame: false, // 添加后自定义标题//自定义边框
    resizable: false, // 可否缩放
    movable: true,
    webPreferences: { // 网页功能的设置
      webSecurity: false, // 当设置为 false, 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的，还会把 allowRunningInsecureContent设置为 true. 默认值为 true
      allowRunningInsecureContent: true // 允许一个 https 页面运行 http url 里的资源，包括 JavaScript, CSS 或 plugins. 默认值为 false
    }
  })

  mainWindow.loadURL(winURL)

  mainWindow.on('closed', () => {
    mainWindow = null
  })
}

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})

// 打开计算机资源管理器
ipcMain.on('open-directory-dialog', function (event, defaultPath, p) {
  dialog.showOpenDialog(
    {
      defaultPath: defaultPath,
      properties: [p] // openFile - 允许选择文件  openDirectory - 允许选择文件夹  openDirectory - 允许选择文件夹
    },
    function (files) {
      if (files) {
        // 如果有选中
        // 发选择的对象给子进程
        event.sender.send('selectedItem', files[0])
      }
    }
  )
})

// 打开新窗口
// https://electronjs.org/docs/api/browser-window
let newwin
ipcMain.on('open2', (event, url) => {
  if (newwin) return
  newwin = new BrowserWindow({
    width: 650,
    height: 450,
    useContentSize: true, // width 和 height 将设置为 web 页面的尺寸(译注: 不包含边框)
    parent: mainWindow, // win是主窗口
    frame: false, // 添加后自定义标题//自定义边框
    resizable: false, // 可否缩放
    movable: true, // 可否移动
    webPreferences: { // 网页功能的设置
      devTools: false,
      webSecurity: false, // 当设置为 false, 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的，还会把 allowRunningInsecureContent设置为 true. 默认值为 true
      allowRunningInsecureContent: true // 允许一个 https 页面运行 http url 里的资源，包括 JavaScript, CSS 或 plugins. 默认值为 false
    }
  })
  newwin.loadURL(winURL + url)
  // newwin.loadURL(path.join('file:', __dirname, 'new.html')); //new.html是新开窗口的渲染进程
  newwin.on('closed', () => { newwin = null })
})

ipcMain.on('min', e => mainWindow.minimize())
ipcMain.on('max', e => mainWindow.maximize())
ipcMain.on('close', e => mainWindow.close())
ipcMain.on('refreshMain', (event, message) => {
  mainWindow.webContents.send('refreshFromMain', message)
})

ipcMain.on('closeChild', e => newwin.close())

// 以下是创建python的进程

// let pyProc = null
// let pyPort = null

// const selectPort = () => {
//   pyPort = 4242
//   return pyPort
// }

// const createPyProc = () => {
//   console.log('creating python server...')
//   let port = '' + selectPort()
//   let script = path.join(__dirname, 'py', 'api.py')
//   let pypath = path.join(__dirname, 'py','.env','scripts','python.exe')
//   pyProc = require('child_process').spawn(pypath, [script, port])
//   if (pyProc != null) {
//     console.log('child process success')
//   }
// }

// // 设置一个全局变量来决定是否为开发环境
// const NODE_ENV = 'production'
// // const NODE_ENV = 'development'
// // 根据不同的环境来选择不同的启动方式
// const createPyProc = () => {
//   console.log('creating python server...')
//   let port = '' + selectPort()
//   if (NODE_ENV ==='development'){
//     let script = path.join(__dirname, 'py', 'api.py')
//     let pypath = path.join(__dirname, 'py', '.env', 'scripts', 'python.exe')
//     pyProc = require('child_process').spawn(pypath, [script, port])
//   }else{
//     let exePath = path.join(__dirname, 'pydist', 'api','api.exe')
//     pyProc=require('child_process').execFile(exePath, [port])
//   }
//   if (pyProc != null) {
//     console.log('child process success')
//   }
// }

// if(NODE_ENV==='development'){
// 	mainWindow.webContents.openDevTools()
// }

// const exitPyProc = () => {
//   pyProc.kill()
//   pyProc = null
//   pyPort = null
// }

// app.on('ready', createPyProc)
// app.on('will-quit', exitPyProc)
